/*
    Estado          Metodo
    SP              obtenerArbolCategoriasSinHojas - Diego
    SP              insertarDestacados - Diego
    SP?              eliminarDestacado - Diego. No se entiend para q el codigo de campania por parametro
 */

package gestores.administracion;

import dal.ArticuloDAL;
import dal.CampaniaDAL;
import dal.CategoriaDAL;

import excepciones.AvwException;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Logger;

import negocio.ArticuloCampania;
import negocio.ArticuloWeb;
import negocio.CampaniaWeb;
import negocio.CategoriaWeb;

import negocio.DestacadoWeb;

import util.Utiles;

public class GestorDestacadosCampania {
    
    static final Logger logger =
            Utiles.iniciarLogger("GestorDestacadosCampania", true);
    
    /**
     * Lista el arbol de categorias de la campania
     * pasada por parametro y sin las categorias hojas
     * (que son las que no tienen categorias hijas).
     * Cada hash tiene los siguientes datos.
     * cawCodigo, cawNombre, cawPalabrasClaves, cawCodigo_padre.
     * @return ArrayList<HashMap>.
     **/
    public static ArrayList<HashMap> obtenerArbolCategoriasSinHojas() throws AvwException, NullPointerException {
        ArrayList<HashMap> arbol = new ArrayList<HashMap>();
        for (CategoriaWeb categoriaWeb:
            CategoriaDAL.listarCategoriasSinCategoriasHijas()) {
                HashMap hash = new HashMap();
                hash.put("cawCodigo", categoriaWeb.getCawCodigo());
                hash.put("cawNombre", categoriaWeb.getCawNombre());
                hash.put("cawPalabrasClaves", categoriaWeb.getCawPalabrasClaves());
                hash.put("cawCodigo_padre",
                        categoriaWeb.getCawCategoriaPadre().getCawCodigo());
                
                arbol.add(hash);
            }
            return arbol;
    }
    
    /**
     * Lista el arbol de categorias de la campania
     * pasada por parametro y sin las categorias hojas
     * (que son las que no tienen categorias hijas).
     * Cada hash tiene los siguientes datos.
     * cawCodigo, cawNombre, cawPalabrasClaves, cawCodigo_padre.
     * @return ArrayList<HashMap>.
     **/
    public static ArrayList<HashMap> obtenerArticulosPorCampaniaCategoriaYNivel(
            String camCodigo, String cawCodigo, int nivel) throws AvwException, NullPointerException {
        ArrayList<HashMap> articulos = new ArrayList<HashMap>();
        for (ArticuloCampania articuloCampania: ArticuloDAL.listarArticuloCampania(
                new CampaniaWeb(camCodigo),new CategoriaWeb(cawCodigo),
                new DestacadoWeb(nivel))) {
            HashMap hash = new HashMap();
            hash.put("artCodigo",articuloCampania.getArcArticulo().getArtCodigo());
            hash.put("artNombre",articuloCampania.getArcArticulo().getArtNombre());
            articulos.add(hash);
        }
        return articulos;
    }
    
    /**
     * Inserta destacados.
     * @param String camCodigo.
     * @param int desNivel.
     * @param ArrayList<HashMap> articulos, de codigos de articulos
     * asociados "artCodigo".
     * */
    public static void insertarDestacados(String camCodigo, int desNivel,
            ArrayList<HashMap> articulos) throws AvwException, NullPointerException {
        ArrayList<ArticuloCampania> articulosCampania =
                new ArrayList<ArticuloCampania>();
        
        for (HashMap a: articulos) {
            ArticuloCampania articulo = new ArticuloCampania();
            ArticuloWeb articuloWeb = new ArticuloWeb(a.get("artCodigo").toString());
            articuloWeb.setArwCategoria(new CategoriaWeb(a.get("cawCodigo").toString()));
            articulo.setArcArticulo(articuloWeb);
            articulo.setArcDestacado(new DestacadoWeb(desNivel));
            articulosCampania.add(articulo);
        }
        
        CampaniaDAL.insertarDestacados(articulosCampania,
                new CampaniaWeb(camCodigo));
    }
    
    /**
     * @param String camCodigo.
     * @param int desNivel.
     * @param String artCodigo.
     **/
    public static void eliminarDestacado(String camCodigo, int desNivel,
            String artCodigo, String cawCodigo) throws AvwException {
        ArticuloCampania articuloCampania = new ArticuloCampania();
        CampaniaWeb campaniaWeb = new CampaniaWeb(camCodigo);
        DestacadoWeb destacadoWeb = new DestacadoWeb(desNivel);       
        
        destacadoWeb.setCawCategoria(new CategoriaWeb(cawCodigo));                
        articuloCampania.setArcArticulo(new ArticuloWeb(artCodigo));        
        articuloCampania.setArcDestacado(destacadoWeb);
        
        CampaniaDAL.eliminarDestacado(articuloCampania, campaniaWeb);
    }
}
